package com.cy.pj.sys.web.interceptor;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
import java.time.LocalTime;
import java.util.Map;

/**
 * 定义spring web 模块中的拦截器，通过此拦截器对handler中某些方法的
 * 进行时间访问限制。
 */
@Slf4j//lombok会在当前类编译成class文件时,自动在类文件中添加一个log对象
public class TimeAccessInterceptor implements HandlerInterceptor {
    /**preHandle方法会在目标handler方法执行之前进行访问拦截
     * 方法返回值为true时表示请求放行，false表示请求到此结束，
     * 不再去执行handler中的方法
     * */
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler){

        LocalTime now = LocalTime.now();//jdk中的时间对象(当前时间对象)--静态的方法
        int hour = now.getHour();//获取当前时间对象的小时
        System.out.println("hour="+hour);

        //设置在规定时间内进行访问
        if(hour<=6 /**|| hour>=12*/){
            throw new RuntimeException("请在6-10点进行访问");
        }



        return true;
    }
//    @Override
//    public boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object Handle){
//        return true;
//    }

    //对于拦截器的一些测试
    public void test(HttpServletRequest request,
                     HttpServletResponse response,
                     Object handler){
        //获取拦截器中的地址
        String url = request.getRemoteUser();
        System.out.println("request.url="+url);
        Map<String, String[]> map = request.getParameterMap();
        System.out.println("map.keySet->"+map.keySet());
        HandlerMethod handle = (HandlerMethod)handler;
        Method method = handle.getMethod();
        System.out.println("methodName->"+method.getName());




        System.out.println("preHandle");
    }

}
//lombok(朗爸可),主要就是把一些公共的代码,get/set/log等通过注解的方式引入,从而简化代码
